/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package sw2asteriskjava;

import conn.bean.BCampana;
import conn.dao.DCampana;
import it.sauronsoftware.cron4j.Scheduler;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 *
 * @author gustavo.higa
 */
public class Main {

    /**
     * @param args the command line arguments
     */

    public static void main(String[] args) {

        int i = 1;
        boolean acaboCampanas = false;

        /*--------------------------------------------------------------
         PARTE1
         COMPROBAR EXISTENCIA DE LOS SIPS*/

        /*
        /* FIN PARTE1---------------------------------------------------*/


        /*--------------------------------------------------------------
         PARTE2:
        ACA SE OBTIENE LA CANTIDAD DE CANALES*/
        AsteriskManagerUtils asteriskUtil =new AsteriskManagerUtils();
        //int cantidad_canales=asteriskUtil.getActiveChannels();
int cantidad_canales=10;
        /*FIN PARTE2----------------------------------------------------- */


        /*------------------------------------------------------------------
         PARTE3:
         * SE CREAN LOS HILOS
         */
        DCampana dCampana=new DCampana();
        /*SE SACAN LAS CAMPANAS EN PROCESO*/
        List <BCampana> listaCampanas=(List<BCampana>)dCampana.getCampanasEnProceso();
        int cantidad_campanas=listaCampanas.size();
        int CANTIDAD_HILOS=cantidad_canales;
        /* SI HAY MENOS CAMPANAS Q CANALES, SOLO SE CREA UN HILO POR CADA CAMPANA.
         * ESTO ES PARA NO USAR CANALES DE MAS
         */
        if (cantidad_campanas<cantidad_canales){
            CANTIDAD_HILOS=cantidad_campanas;
        }

        ChasquiScheduler listaHilos[]=new ChasquiScheduler[CANTIDAD_HILOS];
        for (int j=0;j<CANTIDAD_HILOS;j++){
            listaHilos[j]=new ChasquiScheduler("*/2 * * * *");
            listaHilos[j].setCampanaAsociada(listaCampanas.get(j));
        }

        /* FIN PARTE3-------------------------------------------------------*/

        /*--------------------------------------------------------------------
         PARTE4:
         SE INICIAN LOS HILOS */
        for (int k=0;k<CANTIDAD_HILOS;k++){
            listaHilos[k].start();
        }
        /*FIN PARTE4---------------------------------------------------------- */


        /*BUCLE HASTA QUE TERMINEN LAS CAMPANAS*/
        while (!acaboCampanas) {
            acaboCampanas=true;
            /*Se verifica si todos los hilos acabaron con sus campanas*/
            for (int k=0;k<CANTIDAD_HILOS;k++){
                acaboCampanas=acaboCampanas&&listaHilos[k].isAcaboCampana();
            }

            /*Si no acabaron todas las campanas, el hilo Main se duerme 2 minutos para
             * dar tiempo a que terminen y verificar de nuevo */
            if (!acaboCampanas){
                try {
                    Thread.sleep(1000 * 60 * 2);
                } catch (InterruptedException ex) {
                    Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
                }
            }
        }

        /*SI SE LLEGA ACA SE LLAMARON A TODOS LOS NUMEROS DE LAS CAMPANAS*/
        /* ESTE FOR TERMINA LOS HILOS DE MANERA CORRECTA, PARA EVITAR FUGAS DE MEMORIA
         *
         */
        for (int k=0;k<CANTIDAD_HILOS;k++){
            /*TERMINAR LOS HILOS*/
            listaHilos[k].stop();
        }
//         AsteriskManagerUtils u = new AsteriskManagerUtils();
//        u.generateCallwRecordedSound("LOCAL/4004", "from-internal", "prepaid-enter-card-num", "4004");
//        u.listenForCdrEvent();
//        u.getActiveChannels();
    }
    }
